﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE.Gen;


namespace Insifo.DL.Gen
{   
    public class DLParametroDetalle : DLTransaction, IDLTransaccion<BEParametroDetalle>
    
    {
        #region  Members

        /// <summary>
        /// Método obtiene un Parametro
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public BEParametroDetalle Obtener(BEParametroDetalle pbe)
        {
            BEParametroDetalle be = new BEParametroDetalle();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ParametroDetalle_Obtener");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                sqlDB.AddInParameter(dbCmd, "@ai_IdCompania", DbType.String, pbe.IdCompania);
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.String, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Parametro", DbType.String, pbe.Parametro);
                sqlDB.AddInParameter(dbCmd, "@as_ParametroDetalle", DbType.String, pbe.ParametroDetalle);
                using (IDataReader dr = sqlDB.ExecuteReader(dbCmd))
                {
                    while (dr.Read())
                    {
                        be.Descripcion  = DBValue.Get<string>(dr, "Descripcion");
                        be.ValorTexto1  = DBValue.Get<string>(dr, "ValorTexto1");
                        be.ValorTexto2  = DBValue.Get<string>(dr, "ValorTexto2");
                        be.ValorTexto3  = DBValue.Get<string>(dr, "ValorTexto3");
                        be.ValorTexto4  = DBValue.Get<string>(dr, "ValorTexto4");
                        be.ValorTexto5  = DBValue.Get<string>(dr, "ValorTexto5");
                        be.ValorTexto6  = DBValue.Get<string>(dr, "ValorTexto6");
                        be.ValorNumero  = DBValue.Get<decimal>(dr, "ValorNumero");
                        be.ValorFecha   = DBValue.Get<DateTime>(dr, "ValorFecha");
                        be.Estado       = DBValue.Get<string>(dr, "Estado");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }
        
        /// <summary>
        /// Método que lista ParametroDetalle 
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar(BEParametroDetalle pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ParametroDetalle_Listar");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                sqlDB.AddInParameter(dbCmd, "@ai_IdCompania", DbType.String, pbe.IdCompania);
                sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.String, pbe.IdAplicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Parametro", DbType.String, pbe.Parametro);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }


        
        /// <summary>
        /// Método obtiene el Parametro
        /// </summary>
        /// <returns>Devuelve Objeto</returns>
        /// 

        public BEParametroDetalle ObtenerMant(BEParametroDetalle pbe)
        {
            BEParametroDetalle be = new BEParametroDetalle();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ParametroDetalle_Obtener_Mant");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdParametro", DbType.Int32, pbe.IdParametro);
                sqlDB.AddInParameter(dbCmd, "@as_ParametroDetalle", DbType.String, pbe.ParametroDetalle);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdParametro = DBValue.Get<Int32>(reader, "IdParametro");
                        be.ParametroDetalle = DBValue.Get<String>(reader, "ParametroDetalle");
                        be.Descripcion = DBValue.Get<String>(reader, "Descripcion");
                        be.ValorTexto1 = DBValue.Get<String>(reader, "ValorTexto1");
                        be.ValorTexto2 = DBValue.Get<String>(reader, "ValorTexto2");
                        be.ValorTexto3 = DBValue.Get<String>(reader, "ValorTexto3");
                        be.ValorTexto4 = DBValue.Get<String>(reader, "ValorTexto4");
                        be.ValorTexto5 = DBValue.Get<String>(reader, "ValorTexto5");
                        be.ValorTexto6 = DBValue.Get<String>(reader, "ValorTexto6");
                        be.ValorNumero = DBValue.Get<Decimal>(reader, "ValorNumero");
                        be.ValorFecha = DBValue.Get<DateTime>(reader, "ValorFecha");
                        be.Explicacion = DBValue.Get<String>(reader, "Explicacion");
                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        be.UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        be.UsuarioCreacion = DBValue.Get<String>(reader, "UsuarioCreacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        public List<BEParametroDetalle> ListarMant(BEParametroDetalle pbe)
        {
            //DataSet ds = new DataSet();
            List<BEParametroDetalle> lst = new List<BEParametroDetalle>();

            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ParametroDetalle_Listar_Mant");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdParametro", DbType.Int32, pbe.IdParametro);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);
                //ds = sqlDB.ExecuteDataSet(dbCmd);
                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        BEParametroDetalle be = new BEParametroDetalle
                        {
                            IdParametro = DBValue.Get<Int32>(reader, "IdParametro"),
                            ParametroDetalle = DBValue.Get<String>(reader, "ParametroDetalle"),
                            Descripcion = DBValue.Get<String>(reader, "Descripcion"),
                            ValorTexto1 = DBValue.Get<String>(reader, "ValorTexto1"),
                            ValorTexto2 = DBValue.Get<String>(reader, "ValorTexto2"),
                            ValorTexto3 = DBValue.Get<String>(reader, "ValorTexto3"),
                            ValorTexto4 = DBValue.Get<String>(reader, "ValorTexto4"),
                            ValorTexto5 = DBValue.Get<String>(reader, "ValorTexto5"),
                            ValorTexto6 = DBValue.Get<String>(reader, "ValorTexto6"),
                            ValorNumero = DBValue.Get<Decimal>(reader, "ValorNumero"),
                            ValorFecha =  DBValue.Get<DateTime>(reader, "ValorFecha") == DateTime.MinValue ? (DateTime?)null : DBValue.Get<DateTime>(reader, "ValorFecha"),
                            Explicacion = DBValue.Get<String>(reader, "Explicacion"),

                            Estado = DBValue.Get<String>(reader, "Estado"),
                            Fila = (Int32)DBValue.Get<Int64>(reader, "Fila"),
                            FilasXPagina = DBValue.Get<Int32>(reader, "FilasXPagina"),
                            TotalFilas = DBValue.Get<Int32>(reader, "TotalFilas")

                        };
                        lst.Add(be);
                    }

                }

            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return lst;
        }

        public BEParametroDetalle Insertar(BEParametroDetalle pbe)
        {
            BEParametroDetalle be = new BEParametroDetalle();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ParametroDetalle_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;


                sqlDB.AddInParameter(dbCmd, "@ai_IdParametro", DbType.Int32, pbe.IdParametro);
                sqlDB.AddInParameter(dbCmd, "@as_ParametroDetalle", DbType.String, pbe.ParametroDetalle);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto1", DbType.String, pbe.ValorTexto1);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto2", DbType.String, pbe.ValorTexto2);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto3", DbType.String, pbe.ValorTexto3);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto4", DbType.String, pbe.ValorTexto4);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto5", DbType.String, pbe.ValorTexto5);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto6", DbType.String, pbe.ValorTexto6);

                sqlDB.AddInParameter(dbCmd, "@as_ValorNumero", DbType.Decimal, pbe.ValorNumero);
                sqlDB.AddInParameter(dbCmd, "@as_ValorFecha", DbType.DateTime, pbe.ValorFecha);
                sqlDB.AddInParameter(dbCmd, "@as_Explicacion", DbType.String, pbe.Explicacion);

                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdParametro = DBValue.Get<int>(reader, "IdParametro");
                        be.ParametroDetalle = DBValue.Get<String>(reader, "ParametroDetalle");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza un Reporte
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEParametroDetalle Actualizar(BEParametroDetalle pbe)
        {
            BEParametroDetalle be = new BEParametroDetalle();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ParametroDetalle_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdParametro", DbType.Int32, pbe.IdParametro);
                sqlDB.AddInParameter(dbCmd, "@as_ParametroDetalle", DbType.String, pbe.ParametroDetalle);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto1", DbType.String, pbe.ValorTexto1);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto2", DbType.String, pbe.ValorTexto2);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto3", DbType.String, pbe.ValorTexto3);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto4", DbType.String, pbe.ValorTexto4);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto5", DbType.String, pbe.ValorTexto5);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto6", DbType.String, pbe.ValorTexto6);
                sqlDB.AddInParameter(dbCmd, "@as_ValorNumero", DbType.Decimal, pbe.ValorNumero);
                sqlDB.AddInParameter(dbCmd, "@as_ValorFecha", DbType.DateTime, pbe.ValorFecha);
                sqlDB.AddInParameter(dbCmd, "@as_Explicacion", DbType.String, pbe.Explicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdParametro = DBValue.Get<Int32>(reader, "IdParametro");
                        be.ParametroDetalle = DBValue.Get<String>(reader, "ParametroDetalle");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza un Reporte
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEParametroDetalle ActualizarPorParametro(BEParametroDetalle pbe)
        {
            BEParametroDetalle be = new BEParametroDetalle();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ParametroDetalle_Actualizar_X_Parametro");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@as_Parametro", DbType.String, pbe.Parametro);
                sqlDB.AddInParameter(dbCmd, "@as_ParametroDetalle", DbType.String, pbe.ParametroDetalle);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto1", DbType.String, pbe.ValorTexto1);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto2", DbType.String, pbe.ValorTexto2);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto3", DbType.String, pbe.ValorTexto3);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto4", DbType.String, pbe.ValorTexto4);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto5", DbType.String, pbe.ValorTexto5);
                sqlDB.AddInParameter(dbCmd, "@as_ValorTexto6", DbType.String, pbe.ValorTexto6);
                sqlDB.AddInParameter(dbCmd, "@as_ValorNumero", DbType.Decimal, pbe.ValorNumero);
                sqlDB.AddInParameter(dbCmd, "@as_ValorFecha", DbType.DateTime, pbe.ValorFecha);
                sqlDB.AddInParameter(dbCmd, "@as_Explicacion", DbType.String, pbe.Explicacion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdParametro = DBValue.Get<Int32>(reader, "IdParametro");
                        be.ParametroDetalle = DBValue.Get<String>(reader, "ParametroDetalle");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        /// <summary>
        /// Método Actualiza el Estado del Parametro Detalle
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEParametroDetalle Eliminar(BEParametroDetalle pbe)
        {
            BEParametroDetalle be = new BEParametroDetalle();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_ParametroDetalle_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdParametro", DbType.Int32, pbe.IdParametro);
                sqlDB.AddInParameter(dbCmd, "@as_ParametroDetalle", DbType.String, pbe.ParametroDetalle);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdParametro = DBValue.Get<Int32>(reader, "IdParametro");
                        be.ParametroDetalle = DBValue.Get<String>(reader, "ParametroDetalle");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        public BEParametroDetalle Modificar(BEParametroDetalle pbe)
        {
            //return _dl.Actualizar(pbe);
            BEParametroDetalle be = null;
            if (pbe.RefAccion == BE.DbTipoAccion.Insertar)
            {
                be = Insertar(pbe);
            }
            else if (pbe.RefAccion == BE.DbTipoAccion.Actualizar)
            {
                be = Actualizar(pbe);
            }
            else if (pbe.RefAccion == BE.DbTipoAccion.Eliminar)
            {
                be = Eliminar(pbe);
            }
            return be;
        }

        #endregion  Members
    }
}
